【PHP/演習問題】break文[2]

【PHP/演習問題】break文[2]

問題

次の実行例になるような複数商品の合計料金を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 商品の料金は『単価×個数』とする
  • 商品名、単価、個数は標準入力で入力する
  • 商品名、単価、個数のいずれかに空入力が入力された時点で、入力を終了する
    ※ 空入力 = 何も入力せずにEnterキーを押す
$ php practice.php
<<<< 商品入力 >>>>
商品名 > 炭酸水
単価  > 150
個数  > 2
商品名 > 弁当
単価  > 560
個数  > 2
商品名 > お菓子
単価  > 300
個数  > 7
商品名 > 

<<<<  会計  >>>>
---- 合計料金 ----
3520
----  明細  ----
商品名 : 炭酸水
単価  : 150
個数  : 2
.................
商品名 : 弁当
単価  : 560
個数  : 2
.................
商品名 : お菓子
単価  : 300
個数  : 7
.................
$ php practice.php
<<<< 商品入力 >>>>
商品名 > ローストビーフ
単価  > 1500
個数  > 2
商品名 > ワイン
単価  > 500
個数  > 4
商品名 > 牡蠣
単価  > 600
個数  >  

<<<<  会計  >>>>
---- 合計料金 ----
5000
----  明細  ----
商品名 : ローストビーフ
単価  : 1500
個数  : 2
.................
商品名 : ワイン
単価  : 500
個数  : 4
.................

解答例

<?php

$items = [];

$total = 0;

echo "<<<< 商品入力 >>>>\n";
while( true ) {
    echo "商品名 > ";
    $name = trim(fgets(STDIN));
    if( $name == '' ) {
        break;
    }
    echo "単価  > ";
    $price = trim(fgets(STDIN));
    if( $price == '' ) {
        break;
    }
    echo "個数  > ";
    $unit = trim(fgets(STDIN));
    if( $unit == '' ) {
        break;
    }
    
    $items[] = [ 'name'=>$name, 'price'=>$price, 'unit'=>$unit ];
    
    $total += $price * $unit;
}

echo "\n";

echo "<<<<  会計  >>>>\n";
echo "---- 合計料金 ----\n";
echo $total."\n";
echo "----  明細  ----\n";
foreach( $items as $item ) {
    echo "商品名 : ".$item['name']."\n";;
    echo "単価  : ".$item['price']."\n";
    echo "個数  : ".$item['unit']."\n";;
    echo ".................\n";
}

?>